安全数据分析:数据泄露之后的数据挖掘
一次性进群,长期免费索取教程,没有付费教程。
教程列表见微信公众号底部菜单
进微信群回复公众号:微信群;QQ群:460500587
微信公众号:计算机与网络安全
ID:Computer-network
当组织经历一个安全事件时,他们通常的反应是尽快回归正常。因为把安全事件视为一种失败的标志或一件尴尬的事,他们会尽可能最小化这次事件带来的不良影响,然后将该事件抛在脑后。在这种情况下,他们往往会忽略一个重要的任务,错过了重要线索。
在这样的一个安全事件中,大量数据被生成,它们正等待被收集和分析。考虑一下,如果能收集这些数据,了解这些数据的意义,并将这个安全事件和其他安全事件进行对比,也许就能学习如何阻止下一次类似安全事件的发生。甚至可以识别这类安全事件的趋势和模式,进而通过一种预防性控制来阻止多种相似的攻击。本文将介绍如何确定收集哪些数据以及如何管理这些数据,如何分析和共享这些数据。
为了应对从数据泄密中进行学习这一挑战,这里将使用事件记录和事件共享记录(Vocabulary for Event Recording and Incident Sharing,VERIS)架构。任何组织都能采纳VERIS架构,并从所遇到的内部事件中收集数据。当需要信息共享时,这些数据已经做好了被传递和被交换的准备。
Verizon公司的数据泄露调查报告(DBIR)使用VERIS架构进行数据收集和数据分析。除了是一个开放架构以外,VERIS还有其他优点。有一个叫做VERIS社区数据库(VERIS Community Database,VCDB)的项目,该项目提供免费可下载的公开安全事件数据集,这些数据集采用VERIS格式。
一、建立研究项目
首先,应该将这种失陷分析看做是一个研究项目。如果把它看做是“度量计划(metrics program)”或者“安全项目”,您可能误以为信息安全是独特的,但实际上不是。它是对数据的收集和分析,这项工作已经在不同学科、不同时间开展了无数次。把它当做一个独特项目,试图从头开始会耗费无谓的时间和精力,有经验的数据科学家并不会这么做。让我们避免上述问题,并把失陷分析看做是一个研究项目。
这里大部分工作都是探索性的。通过处理数据,观察数据内容,并提出一个试图通过数据能够回答的问题,然后再回到数据上来。这里的工作有所不同,因为在初始的时候没有数据。如果直接去收集失陷数据,以为某些数据在后续工作中可能有意义,这会浪费大量资源,而且最终可能会漏掉真正有用的数据。因此,应该为这类工作建立一个架构,考虑有可能探索的少量问题,并以此确定您希望收集的数据点。
VERIS被设计用于支持战略决策过程。换句话说,将少量的资源集中到哪里才能从安全开销中获得最大收益?给出审计结果或整治项目清单,如何确定优先级以解决最重要的问题?当然,也许上述问题的反面问题更加重要。您能否确定那些不应该消耗时间和金钱的任务?它们可以被总结为:
收集和分析失陷数据的目标是支持决策过程以保证安全。
注意“支持”这个词。这个研究是为了支持决策过程,而不是试图成为或者代替决策过程。您需要清晰地认识到,给出安全优先级是一个复杂的问题,这类工作在行业中会被剔除掉。对于该“剔除”,由于只有少量数据,您不能假设您能够得到一个恰到好处的研究结果。应该注意到问题的不确定性,并在这项工作中尽可能多地降低问题的不确定性。这些决策应该在数据分析之前进行,决策过程需要充分利用收集到的任何一点信息。
失陷数据降低了问题的不确定性
收集失陷数据来生成完美的优先级列表是不可能的。这些数据只能让您获得更多的信息,而无法明确指出前进的道路。那么,是否有必要收集这些数据呢?如果这些信息不能告诉您具体该做什么,是否值得花费时间和资源来生成信息?
答案是肯定的。
不确定性存在于您已经知道的信息与您需要知道的用于最优决策的信息之间。由于信息中存在不确定性,我们常常得到不完美的信息,然而,信息的价值应该通过比较来评估。不是通过对比您期望得到的完美信息和您将要得到的信息,而是对比当前有的信息和将要得到的信息。这就是这类数据分析的价值所在。数据会通过减少您想知道和您应该知道信息的差距以降低不确定性。相较于以往的方法,这种思路是一种更好的切入点。您正在进步,并为下一次降低更大的不确定性打下基础。这就是科学知识的发展过程:一系列的小进步,每次减少一些不确定性。因此,我们的目标不是获取完美信息,当无法获得完美信息时放弃。您应该集中精力在如何获得更多的知识,这就是价值所在。
二、数据收集框架的思考
从一个过程(process)中手动生成数据存在一些隐患,如果在此过程中不够仔细,会产生不稳固的数据,还有一些非常令人头痛的问题。我们总结了以下手动收集数据的准则。这些准则不仅适用于收集安全事件数据,同时也适用于所有手动收集数据的工作。
1、瞄准客观的答案
首先,您所提出的问题需要瞄准客观的答案。如果一个问题需要得到一些意见,那么答案的结果会包含很多因素,而且还会被一些奇怪的因素影响,诸如分析师今天中午是否吃了饭或吃了什么。在有些情况下这种结果可以接受,因为不一致的答案可能会比没有答案好,另外,有时您只是想在一些约束下征求专家的意见。然而,在绝大部分时候,这些问题应侧重于可观察或从观察中可推导出的事实。
比如说应提出以下比较好的问题,恶意软件是否涉及攻击?哪些功能被执行?而不是提出“恶意软件有多先进?”这样的问题。调查人员在失陷过程中能指出恶意软件是否被使用。如果调查人员有资源分析恶意软件(或者说恶意软件能够被识别),就不必去猜测该恶意软件的能力是什么。
2、限制可能的答案
下一步,将可能的答案约束在一个小选项集中。如果问题需要得到一句话或一个描述,在没有大量额外附加工作的情况下,它在数据分析中不会有直接作用。大部分时候,自由文本字段在记录特性或设置上下文方面非常有用,以便您想了解为什么这些数据看起来是这样的。基于上述考虑,手动数据收集需要明智地使用Notes字段和事件全局总结字段。但是请记住,所有的数据分析都将使用从约束列表或数字中找到的数据。从长远来看,把数据限制在一组数值中能够简化分析。
3、允许“其他”和“未知”选项
几乎所有答案的受限列表都必须允许“其他”和“未知”选项。即便问题简单到所有人都应该知道答案,世界也能制造出一个环境证明这个假设是错误的。包含“未知”选项能够区分什么时候您真的不知道和什么时候该问题不适用。这是一个微妙的区别,但是可能导致分析陷入困境。只有极少的问题不需要“未知”选项,但是他们数量太少了,当看到具体的场景时您会对它们有所认识。
比如说,如果您希望知道一个服务器是否虚拟化的,您可能创建了一个简单的复选框以表示它是否为虚拟化。但是上述方法不能在信息无法获取时使用(总会有一些场景,其信息是无法获得的)。现在您将选项设定为“是”和“其他”,其中的“其他”表示“否”和“我不知道”。其结果是您将无法创建已经虚拟化主机的百分比或观察没有虚拟化的系统,因为您无法区分“否”和“我不知道”。
需要添加的第二个字段是“其他”,或者根据问题设定为“不适用”。不要试图设定一个详尽的、包含所有选项的清单。详尽的清单难以管理(它降低了数据录入速度),其实只需要为大部分答案准备选项。您会发现那些常规答案,特别是在安全事件中,会占据绝大部分时间。常规答案决定了时间趋势和统计特性,而非常规答案只是产生了一些有趣的现象。所以,应该抓住数据分析中的常规现象,把非常规现象放在“其他”类别和备注字段中。要留心被标记“其他”的内容,但是如果您制作了一个非常好的选项表,“其他”选项出现的次数应该很少,而且很久才会出现一次。
通过寻找可参考的标准来生成选项清单时可以适当地简化工作。
4、避免混淆并且合并细节
最后这两点看起来微不足道,但是应该在可能的时候避免混淆并将细节进行合并。这两个概念是对立的,需要在他们之间找到一个折中的结果。当一个问题(及其答案)包含不止一个概念时就容易混淆。
比如说,DataLossDB所使用的泄密类型混合了角色、行为和资产等因素。他们的架构罗列了针对“基于计算机的入侵”的“黑客”类型(没有定义资产和角色),或代表“员工…访问机密记录”的“窥探”类型(混合了角色和行为)。您可以指定“被盗的介质”或“被盗的驱动器”或“被盗的磁带”,它们都是混合并重复资产行为(物理损失)的独立选项。
对单一合并“泄密类型”的赋值不应该被认为是错误或不好,它只是代表了研究中的一个不同的目标。只需要注意这类合并会在数据分析时带来一些技术挑战。在对比具体类型时,应该尽可能增加灵活性和收益,但对于这些合并的内容,将其拆分成不同的类别是比较困难的。这样的结果是数据分析只能简单统计所合并的泄密类型出现的频率而不能进行任何其他工作。
合并过程将多个概念组合到一个变量中,但是执行其反过程时要十分小心,也就是将一个概念分解成大量细节内容。应该设法获得足够的细节和分类以支持您的目标。
一个收集过量内容的例子是您试图收集事故是如何被发现的并希望对发现方法进行分类。虽然去了解是否是一个外部安全研究人员发现的,这看起来很有趣,但是即便假设知道他们帽子的颜色(白、黑或灰),根据细节内容生成一些选项也无法帮助您实现目标。您需要通过多重选择(如研究人员-白帽子,研究人员-灰帽子)拆分一个概念(一个外部安全研究人员)。这样您将希望忽略外部安全人员的区别并把所有内容整合到一个更宽广的域:“外部无关联团体”。
话虽如此,在需要的时候还是要观察具体细节内容。比如说,VERIS中的一些资产列表可能被分割为多个类别,每个类别下包含大量的详细资产内容。有时您需要分割数据,有时您需要合并数据,关键是要能够正确平衡。
幸运的是,VERIS在升级的过程中已经考虑了这些问题。最大的挑战之一是对新问题说不。我们总是想多知道一些,但是收集每个数据点都有成本。有时候成本甚至超出了我们的想象。
考虑每个数据点的成本
在人工数据收集过程中,能够考虑到所有需要回答的问题是十分诱人的。生成一个这样的列表并不坏,它甚至对于列出需要回答的问题是有帮助的。但是要十分小心地选择这些问题,因为每个问题都会在数据的生存期内使成本以指数方式递增。在回答问题之前,需要先建立收集数据的方法,所以每个问题必须加入数据收集方法学中。当分析人员开始处理一个事件,在得到每个问题的答案之前他们都需要思考,甚至是研究,这需要消耗时间和精力。那个数据点可能需要处理、清理、存储和管理。当需要解析数据时(您可能希望用很多不同的方法解析),您可能需要考虑某个字段,或者更糟,需要考虑所有字段之间的相互影响。在选择了问题和数据点之后,其他大量数据间微妙的影响会增加每个数据点的成本,这些成本将超出您的想象。
可以假想您正在长途跋涉去拜访一位住在山顶的智者。在智者说一些神秘的东西并且消失之前,您只有有限的时间提问。什么样的问题会产生最大的影响?您希望能够定位一些有必要回答的问题,可能是一些您希望知道答案的问题,然后您会希望有时间能回答更多的问题,但是实际上您不能这样。人工收集数据也会面临相同的问题。如果事后调查问卷提出太多问题或太复杂的问题,人们会马上丧失兴趣,得到的结果是低质量的,这其中就包含那些您真正需要回答的问题。所以,您必须合理选择您的问题。
三、VERIS概述
当开始调查一个安全事件,在过程中会自然出现一个现象。调查人员通常会回答这个问题,“谁对什么(或谁)做了什么,有什么结果?”。这个问题很好地呈现了需要被收集的数据点的集合。所以,作为开始,您应该聚焦在这四点上——“谁(威胁角色)对什么或谁(资产)做了什么(行为),产生了什么结果(属性)?”
但是这些也许不是您感兴趣的内容;您也许还想知道您是如何发现及响应事件的,也许还会把经历的影响作为结果。最终,您会有一些看家项目(一个标识符、总结、工作流状态等),如果您聚合泄密事件,或分享信息,那么您将会希望记录受害者的统计信息。总之,您可以将希望收集的数据段进行分解,正如表1展示的VERIS框架。
表1 VERIS中的数据段
尽管挖掘数据很诱人,但还需要理解这些字段的意义来避免误用。因此,接下来会更详细地介绍VERIS的每个部分并讨论这些字段。注意这些数据段是分开的以便分析师能够思考其结构。比如,实际数据中没有标记incident_id字段用来帮助追踪事件。
尽管我们从一定的深度介绍了VERIS,但是我们不会介绍每个字段,也不会介绍关于架构的所有细节。比如,我们不会指出所有架构中指定“备注”字段的位置(它几乎存在于所有数据段),不会介绍“指标”数据段细节。
1、事件追踪
VERIS中的一些字段用于简单描述或跟踪事件。这些字段有助于通过识别每一个独特的标识符保存记录,跟踪事件的源与任何相关的事件。使用source_id字段来对比事件中的独立“源”和一些类似于VCDB(其自身包含VCDB字段)的数据。如果存在factor值,这意味着它是一个限制性列表,我们只需要知道这些值。事件追踪字段见表2。
表2 事件追踪字段
在分析时,只需要使用一个或者两个字段,它们是两个factor(因子)变量(这又意味着他们受限于一个期望答案的列表)。“security_incident”字段是有必要的,它能帮助您区分该事件是否是一个确认的安全事件(资产的安全属性受到影响)。“confidence”字段是一种不常见的主观字段。它帮助分析人员记录关于他们对输入数据准确度信心的主观评估。这个可选的字段不会受到太多关注,也不会在您将看到的VCDB事件中经常出现。
2、威胁角色
前面的内容大都在介绍混合的技术挑战。这需要引起您的注意,特别是在接下来的三个部分(角色、行为和资产)。DataLossDB架构使用了单一的混合失陷类型,Privacy Rights Clearinghouse的架构也是相同的情况。它们的架构还使用了单一简化的“失陷类型”来定义每个事件,进一步将角色和行为简化到了一个标签中。
比如说,它们有“内鬼(INSD)”类型,该类型的定义是“某人用合法的权限故意访问漏洞信息,比如员工或承包商。”还有“物理损失(PHYS)”类型,它被定义为“丢失、丢弃或被盗非电子记录,例如纸质文件。”当内部人员偷走了纸质文件时,这些简化的标签会在输入数据的过程中让人困惑。
您可能会发现内部人员攻陷系统,下载恶意软件,进行社会工程学攻击,就像一个外部角色干的那样,您希望把数据中的内部角色和外部角色区分开。VERIS通过将“谁”与“做了什么”和“什么受到了影响”区分开来处理这种混乱状况。注意,Privacy Rights Clearinghouse使用的方法并没有错。它只是有不同的关注点,代表了不同的优先级和目标。VERIS的目标是通知和支持安全决策,相较于单一“失陷类型”标签,这种方法能从更多的细节中获益。表3展示了威胁角色字段。
表3 威胁角色字段
威胁角色数据段还包含VERIS的嵌套功能。最高级是角色,所以数据中有“角色”这个数据段,总共有三种类型的角色:外部、内部和伙伴,它们都是可选的。您会希望给角色类型增加细节信息。观察这个数据段内容的“数值类型”,我们会发现它们都属于“factor类型”。这意味着需要包含其中的任何内容或者把他们当作支点。换句话说,如果您希望选取数据以支持一个能够对比不同威胁团体的威胁建模练习,您需要提取有金钱动机的行为,并和不满的员工做对比,见图1。
图1 涵盖所有威胁者角色的已知动机(事件所占百分比)
3、威胁行为
这个数据段收集用于描述威胁角色做了什么或在事件中使用了什么的变量。另外,还有在顶级类别中的嵌套变量。
恶意软件——能够改变资产状态或功能的恶意软件、脚本或代码。
黑客——个人(使用键盘)在没有授权的情况下试图进入或损坏财产。
社会——利用人为因素(网络钓鱼、假托等)。
误用——违背原有用误滥用资源或特权。
物理——涉及接近、占有或强制的个人行为。
错误——因错误或疏忽而完成的任何事。
环境——资产的环境或基础设施中的自然事件和灾害。
对于处理这些类别,您需要十分小心。有很多机会在不同类型之间发生误解和误判。这些类别和每个类别的factor都通过用例被详细解释。如果花时间看一些例子,这些类别就更容易理解和直观。表4展示了行为字段。
表4 行为字段
要注意到“variety”和“vector”是如何一遍一遍重复的。每个行为类别都有一个单独的“variety”字段,每个分类都分配独有的枚举值。除了环境行为以外,所有其他行为都有单独的“vector”字段,每个分类都分配独有的枚举值。最后,社会行为还包含其行为的目标信息,物理行为包含行为的位置信息。每个字段是一个因子(factor),这意味着您能够拆分、相互支撑和基于这些字段进行过滤。详见图2。
图2 威胁行为的十大威胁因素
攻击链中的多个事件
任何从事信息安全的人都知道失陷大都不是简单的单一事件。大多时候,攻击者会产生多个行为,使记录过程十分复杂。VERIS框架中的大多数因子都支持多答案。一方面这是好事,因为您不必从一个复杂的安全事件中选择“最佳答案”,但是另一方面,这增加了数据管理和分析的复杂度。它的难度并不是像它最开始看到的那样。
比如说,假设一个攻击者给行政助理发送了一封网络钓鱼电子邮件,并马上打电话跟进,假装这是一个生意伙伴发送的邮件。这是两个行为,您应该在social.variety字段同时注意到“假托”和“网络钓鱼”。如果网络钓鱼电子邮件中包含已安装的恶意软件,您还应该在“邮件”的种类(variety)和向量(vector)中注意到恶意软件的行为,因为它是通过网络钓鱼攻击安装的。当表示这些数据并统计行为时,您会发现会有多于总事件数量的很多独立行为。这自然排除了饼图的使用,这最终会有益于当事各方。
信息安全中还有一个公共的概念叫做“攻击链”或“杀伤链”。这个概念用于根据攻击顺序来描述行为。虽然VERIS允许多种行为,但是它不记录这些行为发生的顺序。这是一种成本和收益之间的合理均衡。试图给事件排序会为分析师带来巨大成本,同时增加分析的时间。大多数时候,报告和凭据中事件的顺序(尤其是在媒体文章中)是含糊或者没有的。所以说,VERIS简单记录了攻击中存在的事件来减少数据收集过程中的时间和精力。
4、信息资产
资产是需要保护的信息的容器(服务器或其他设备)。正如已经介绍过的其他部分,它也存在最高级别的类别,他们是:
服务器(S)——提供服务的系统
网络(N)——基础设备
用户设备(U)——终端用户设备(笔记本电脑或台式机)
介质(M)——数据存储设备或物理文档
人(P)——因为人们可能会受到影响
自助终端/公用终端(K)——公用设备
每个类别中都包含多种资产,但是种类(variety)和类别存储在同一个字段。比如说,一个邮件服务器会被存储为“S-Mail”,一个台式机是“U-Desktop”。每个资产都有一个可选的(amount)数量字段,该字段允许您在一个种类中记录多个资产,如果这些资产都涉及一个相同的事件的话。表5描述了资产字段。
表5 资产字段
资产中包含相当多的信息,而且还有一些是新增加到VERIS框架。移动设备受到大量关注,员工将自己的设备带入企业中。这可能是云服务应用和资产中存在的独有风险,所以它也需要被监控。注意到这些资产的数值类型都是“factor”,所以只存在极少数可能的答案。比如说,您不能将资产的可访问性定为“非常(高)”。见图3。
图3 资产分类
5、属性
前述资产的属性是您在信息安全中竭力保护的内容。这些属性基于C.I.A,代表机密性、完整性和可用性。一段时间,VERIS扩展了这三个属性,包含另外三个额外属性来记录Parkerian Hexad(以它们的创始人,安全先锋、安全研究员Donn Parker的名字命名)。额外的三个属性包括:拥有/控制、真实性和效用。但是相较于分类造成的附加成本,增加的字段没有获得很好的收益,所以他们被结合到了那三个高级类别中。为了简化,在保存VERIS记录时,这个数据段的内容通过三个主要类别进行标记(机密性、完整性和可用性)。三个主要类别如下:
机密性,拥有和控制数据——数据泄露给未经授权的角色;拥有者可能不再有专属保管权。
完整性和真实性——资产不完整,或授权内容与功能被改变;与预期状态一致。
可用性和效用——资产无法访问、使用,或不适合使用。
这些类别对于安全团队在决定所关注的区域时十分重要。Verizon数据泄露调查报告只在机密性属性受到影响,确认存在数据泄露时才关注泄露事件。表6显示了属性字段。
表6 属性字段
表中,有一个叫做time range的新字段类型,它其实是两个字段,一个是时间的“单位”,一个是该时间单位的“值”。这个单元代表基本的时间度量:秒、分钟、小时、天、周、月和年。值代表基本时间单位的数值,如3个月或者6个月。VERIS曾经尝试支持具体的日期/时间字段而不是时间范围,但是得到具体日期/时间要么会消耗过多的时间要么就是不可能的。然而,VERIS分析师发现需要知道一个范围是以天为单位还是以周为单位是十分简单的,即使不知道具体的时间范围。比如说,分析师能够知道在DDoS攻击时服务器变成离线状态,这个过程大于60分钟但是小于一整天。跟踪具体时间比较困难,但是这种情况下,您可以观察“小时”这个单位,也许能够知道具体小时的数值。否则,如果精度未知,时间信息将是一片空白。
统计记录
在已公开的失陷事件的信息片段中,其中最普遍的是受影响的记录个数。即使数据库中记录了所有的信息,记者、一般公众以及受害者都希望能够得到明确的数量统计。当各数据被独立存储时,记录相对容易统计。支付卡、信用卡、身份信息、医疗记录在它们的分类中十分清晰,所以它们容易被统计。但是当处理更复杂的数据类型时,如分类信息或商业秘密,统计记录会变得困难。也许能使用公开的物理文档的数量,或者被泄露的文件数量,但是在大多数情况下统计它们也不太容易。总体来说,分析师需要耗费精力来记录数据种类或者内部与商业机密信息的准确数字。在分析和可视化过程中必须考虑上述问题。
6、发现/响应
您已经看到了在可用属性中的时间范围,下面您会了解到更多的与时间线相关的数据内容。正如在前面四个VERIS数据段中看到的,一些字段并不在一个数据段中,但是时间线有它自己的数据段。见表7。
表7 发现及响应字段
注意,这里出现了一个新的叫做“date”的数值类型,它不是一个标准数据字段。因为VERIS需要统计未知数据,所以数据字段存储在分散的变量中。在数据分析中会经常出现事件时间未知或者无法准确报告的情况。这个框架假设至少知道“年”,但是“月”、“天”和时间字段都是可选的数据字段。时间线中的其他字段就是之前介绍的可用属性中的时间区间(time range)类型。
同时注意到,“错误控制”(control_failure)和“行为矫正”(corrective_action)的数据类型是自由文本。这使得在数据分析中需要更多的开销对它们进行分析。最后,“发现”(discovery)方法是罕见的不能有多个答案的枚举变量。这个框架假设当事件被发现后,它就不能再次被发现。所以只允许保存一种发现方法。
7、影响
影响数据段(见表8)也许是事件中分布最分散的数据段。它和架构无关,负责不准确数据的收集并记录影响。这样的结果使这个数据段有一些主观的度量和估计。
表8 影响字段
注意重复的“rating”和货币相关的估值。这里有一个专门定义的“全局”(overall)字段,但是“损失”(loss)数据段在数据中被定义为一个数组。这意味分析师能够在数据中为受到损失的种类(variety)附加多个“损失”数据段。损失种类是特殊的损失类型,比如,“响应和恢复”成本或是“法律和监管”成本。
8、受害者
最后一个数据段介绍受害者。如果VERIS在一个单一组织中实行,并且受害者始终不变,您可以跳过或者硬编码本数据段中的字段。(假设不在合作伙伴、供应商或客户中跟踪事件。)若是类似VCDB的情况,即聚集了很多受害者,这个数据段就至关重要。当您拆分这些字段时,希望获得关于受害者的数据,以便能够对比泄露信息。
回归分析尝试寻找能够描述观察输出的独立变量。所收集的关于受害者的数据仍不足以描述威胁角色及威胁行为的类型。例如,在2013 DBIR中,Verizon公司在至少四分之三的制造业中发现了隶属于国家的间谍,但他们没有在零售行业中出现。尽管行业并不是一个完美的预测变量,但是它能够帮助减小不确定性,这也就是您关注它的原因。表9展示了受害者字段。
表9 受害者字段
VERIS框架新版本改变了这个数据段的存储方式。在版本1.2及其之前的版本,整个受害者数据段会针对事件中的每个受害者进行重复标记。比如说,如果一个组织产生了泄露,并正在代表另外一个组织处理数据,另外的组织也会成为相同数据泄露的受害者。这个发现虽然是令人困惑的,但是“受害者”项还是被当成一个处理。新版本中增加了“二级受害”字段,从而能够了解其他受害者受到了什么威胁。根据VCDB数据集,图4给出了五个最严重的受害行业。
图4 VCDB数据集中的五大行业
在有行业的地方(在本受害者数据段和威胁角色中的伙伴数据段中),它们被设置为“字符串”(string)类型,但是它们本不应该是自由文本。根据尽可能使用其他资源的原则,VERIS使用了美国人口普查局的北美产业分类系统(NAICS)。相较于其他行业分类系统,这种方式增加了灵活性和详细程度。如果分析师尝试生成一个行业列表,他们会为想出许多高级类别而工作一整天。NAICS也是这样开始的(20个最高级类别),但之后使它更易于扩展并包括了行业规范的更多细节。NAICS中的行业通过2到6位整数表示,这就是为什么VERIS将他们存储为字符串而不是一个因子。这个列表是十分巨大的。
例如街上的一个披萨店。NAICS对这个地方的编码是722511,这个数字代表了“披萨店,提供全方位服务”。也许在这种情况下,分析师只知道这是一家餐厅,所以他记录7225,或者也许他知道这个地方提供一些餐饮服务,所以他输入了722。如果他不确定该设施能提供什么服务,他可能会只输入72来表示“住宿与餐饮服务”。当您分析这个字段,您能向下展开细目或向上收起细目,这取决于您希望得到的详细程度。
9、用附加扩展VERIS
最后,VERIS有用“附加”标注的万能数据段。在VERIS的规范中,这个字段没有指定任何技术上的具体内容,数据模式允许这个数据段存在任何东西。它允许个人根据需要来记录不存在于基本VERIS模式中的附加字段。例如,在VCDB库中,每个事件为分析师设立了一个额外的数据段,在这里分析师记录了事件以及它与其他字段一起生成的时间。如果有十分有用的字段没有包括在内,请务必建议修改核心框架。
四、从行为中看VERIS
通常来讲,在进行分析之前,先花一些时间浏览一下数据会有所帮助。它可能会让您建立一个直观的概念,在进行分析时更有章法。因为各事件的平均长度在100行JSON(JavaScript Object Notation,JS 对象简谱)左右,在此就没有列出所有的事件。作为一个不错的例子,代码1展示了VCDB中角色和行为的数据段。
代码1
如果您之前从来没有接触过JSON,这就是它的样子。很少有人愿意手动编辑JSON。这并不是说JSON很难,但确实容易输入错误的东西。可能会忘掉一个逗号、半个引号或者其他东西,从而导致数据不能正常录入。如果您尝试手动创建或修改一个JSON文件,请确定您有方法能够检查您的工作,验证JSON的有效性,如果可以,最好能验证数据中的数值和因子的关系。
使用JSON的最好的一方面是它通常能够正确地导入原生语言使用的对象。在Python中,一个用JSON描述的事件能够直接导入Python字典。使用Python来加载一个JSON对象并查看黑客种类是相对简单的(代码2)。
代码2
这段代码将打印各种黑客种类的Python列表对象并显示[u`SQLi`](一个Unicode字符串显示SQL注入是唯一使用的黑客种类)。在写代码的过程中,应该将json.load()同try-except命令写在一起。如果这个文件在JSON语法上有一些错误,代码能够捕捉这些数据。加上黑客行为是可选的,也需要验证hacking键在导入数据前是否已经存在。这个示例展示了如何轻松加载JSON并处理。
使用R时,JSON文件将转换为列表对象。在运行这里的R代码之前,您需要设置您的工作目录并加载使用的库(代码3)。
代码3
现在为了能够使用R来展现在代码2中实现的功能,需要导入rjson库来读入JSON数据(代码4)。
代码4
R代码返回一个表示黑客种类的单元素向量。再次提醒一下,在一个完整功能的代码中,需要有比示例更好的错误检查。这个例子只是展示了将JSON数据加载到本地对象中并进行处理是很容易的。
五、使用VCDB数据
下面概述一些使用R语言处理的VCDB数据。
对于这种分析,您需要使用veriser包,该包是Jay Jacobs开发的,它位于GitHub库中(在https://github.com/jayjacobs/verisr/tree/master/R)。要注意veriser包正在活跃地开发中,要确保参考最新的文档以获得关于函数的最新描述的最新版本。
为了从GitHub中安装verisr包,您需先要装载devtools包(见代码5)。这是Hadley Wickham众多包中的一个,它允许您从他们的GitHub库中直接安装R的包,这也是用于处理verisr的方法。
代码5
现在可以用verisr包装载VCDB数据了,如果您下载了当前VCDB数据,一定要先修改目录,将其设置为存储VCDB JSON文件的位置(代码6)。
代码6
这应该很快,但是在较慢的机器上时间会较长。如果您的电脑只有少量的RAM,或者VCDB以指数形式增长,则可能无法把他们全部安装在内存中(我们用verisr将100000个事件装载到8G的RAM中,不要超越这个极限)。在装载了这些数据后,是时候深入了解这些数据了。让我们从summary()命令开始(代码7)。verisr包实现了它自己的summary(),所以输出只是针对VERIS数据的。
代码7
如果您已经得到了VCDB的最新数据,一定会发现不同的数据。
JSON表示法
习惯JSON的命名结构并理解在不同设置中这些变量如何访问需要一段时间。如果您装载VERIS JSON数据到Mongo数据库,需要使用JavaScript来查询数据,并尽量对变量使用点表示法。点表示法在verisr包中被使用因为该字段通过传递字符串被引用和检索。这意味着您能通过引用action访问最高级行为。如果希望通过行为访问社会工程学数据段,可以引用action.social,其下的种类数据是action.social.variety。花一些时间观察JSON,并尝试用versir写一些R代码。通过这些实战经验,点表示法方法会变成第二特性。
verisr包有两个高级别函数用于挖掘数据。第一个函数用于生成一个过滤器,用于滤出重点关注的数据内容。第二个函数是一个灵活的函数,叫做getenum(),它用于从数据集中获得具有多种扩展及选项的枚举类型数据。让我们从观察角色开始。您可以从前面的总结中复制如下代码(代码8)。
代码8
在这个数据帧中能够看到原始数据,但是这不是很有用。一些事件会包含多个角色,而您不能简单地将他们相加来得到事件的总数量。幸运的是,当字段被定义时,getenum函数依然能返回事件的总数量。如果添加add.n=TRUE,您会得到样本的一个额外的列。如果添加add.freq=TRUE,您就可以得到与每个条目相关联的百分比。在一个例子(见代码9)中同时观察这两个选项。
代码9
从中您会发现共有1643个在角色数据段中存在某种定义的事件,外部角色占58%。因为这些函数返回一个数据帧,因此可直接将他们送入ggplot2库并进行可视化展示。
getenum()函数具备很多功能。您能通过VERIS框架传递任何变量的名字并能得到任何能可视化的对象。举个例子,生成一个接收VERIS变量名的函数,如action.hacking.vector,并返回一个能够打印或保存的图像对象(见代码10)。这可以被扩展到生成一个报告或者仪表盘。
代码10
有趣的是,这个函数在它的第一行使所有数据准备就绪,在第二行得到前五名元素,然后用剩余的函数绘制一个不错的图形。但是一旦函数被写入和加载,您可以只用一行代码就从数据中生成任意数量的图形。
图5显示了一些可能传递和打印的数值。
图5 各种VCDB数据中前5名视图
得到VERIS数据
在2013年的Verizon数据泄露调查报告中,我们最喜欢的照片之一是一张热度图,它比较了资产和行为,然后根据威胁角色的类型进行单独比较。您可以使用verisr包来创建一个类似的图片,而不需要花费太多工作(见代码11)。
代码11
这段代码看起来遍历所有的事件并生产简单的彩色热度图(如图6所示)。请记住,具体细节取决于VCDB的事件。
图6 关于资产及行为的A2网格比较
使用VERIS数据的真正好处是能够比较不同的数据集。如果您将自己的内部事件以VERIS格式保存,这样能够相对容易的将多个数据集进行比较。您可以迅速查看两个数据集之间的差异。请记住,VCDB收集新闻文章和各种公共来源。一般来说,这些细节可能会不如您需要的那么普遍。
Verizon数据集从各种各样的来源收集数据,但是主要来自安全事件发生后,从法院的调查者那里获得的第一手资料。这意味着这个数据有点偏颇,它局限于复杂的或足够严重使得受害者向外寻求帮助的违法事件。它们来自于执法部门(许多贡献数据的伙伴都来自于执法部分)或事件响应咨询公司。
在这个例子中,您可以使用生成图6的代码并且和VCDB中的4个不同字段进行比较,其中Verizon DBIR包含了过去3年的数据。从各数据集的第一行的事件开始,然后,从第二行过滤掉确认的数据丢失事件(attributes.confidentiliaty.data_disclosure=“Yes”时)。第三步,从第三行中集中分析在已确认的数据丢失事件中出于经济方面动机的攻击者。最后,仅关注于已确认的数据丢失事件中出于意识形态、好奇、找乐或者是为满足自己的骄傲心理(将这类攻击者标记为积极分子)而进行攻击的攻击者,参见图7。
图7 VERIS的力量:使用两个完全不同来源的数据比较类似的观点
您可以看到一些值得讨论的显著差异。因为VCDB数据集中仅包含公开披露的事件,每天都会发生的大量类似“低处果实”的事件永远不会成为DBIR的数据。类似丢失的计算机、扔在垃圾箱里没有被分解的文件或是包含了个人信息却寄给了错误的人的信件,这样的事件常常出现在VCDB数据集中。这就是为什么您可以在VCDB中以“所有事件”命名的行中看到有物理(被盗/丢失)字段和错误(处理错误及不正确交付)字段,以及那些在第二行中确认的数据丢失的信息。请牢记,丢失或被盗的笔记本电脑只是具有数据丢失的可能性。
另一个有趣的对比是关于恶意软件。公开披露的资料很少提及是否使用恶意软件,但是从DBIR的调查可以得知恶意软件经常被使用,用来提升权限或是窃取数据,然而VCDB数据中标记恶意软件的列常常是空的。您可能会了解到针对用户设备的相同类型的影响。尽管用户设备常常在漏洞中产生影响,但是公司公开披露信息时往往忽略提及所涉及的资产信息,仅仅概括地描述,类似“数据库遭到破坏”等等。最终,您将很难在安全事件的记录中看到涉及用户设备的描述。
六、结语
当数据遭到破坏时,您可能很难摆脱“责备受害人”的心态。这意味着受害者往往试图分散注意力而仅关注将事情回归正常。当发生安全失陷的时候,您会为获取更多的信息和数据而奋斗。那些数据正是您所需要的,因为那些事件产生的丰富数据没有被完全挖掘出来。
当您把事件拆分成原子组件:“谁对什么事情(或人)做了什么,有什么样的结果?”,如果您对整体事件链使用一个或两个标签,那么您可以做更多的调研、制定更好的比较方案并且学习到更多内容。确认并记录下都有哪些角色、角色的行为、涉及的资产以及受影响的属性是一个非常不错的开始。但是,请记住,每个数据点是有成本的,您不得不在投入的时间和结果的准确性方面做一些取舍。
使用JSON具有明显的优势。可以快速将其载入多种语言,并存入支持JSON的数据库(例如MongoDB)。R语言可以使用verisr包来读取VERIS数据并进行快速分析及创建可视化效果。但是在利用像VERIS这样的架构时,真正的强大之处在于进行比较。您遇到的问题是罕见的吗?或是您所在行业的其他人乃至整个行业都看到了相同的趋势和攻击吗?分析师们已经开始努力解答这些问题,但随着越来越多的组织使用数据驱动的方法来解决安全问题,他们会很快提出并回答这些问题。
微信公众号:计算机与网络安全
ID:Computer-network